#include <string>

using namespace std;

class Screen {
    public:
        // data 是一个静态成员，返回一个成员指针
        static const string Screen::*data()
            { return &Screen::contents; }
        string contents;
};

int main()
{
    /**
     * 数据成员指针
     * pdata 可以指向一个常量（非常量）Screen 对象的 string 成员
     * 只可以读不可以写
     */
    const string Screen::*pdata = &Screen::contents;
    // auto pdata = &Screen::contents;

    Screen myScreen, *pScreen = &myScreen;
    // .* 解引用 pdata 以获得 myScreen 对象的 contents 成员
    auto s1 = myScreen.*pdata;
    // ->* 解引用 pdata 以获得 pScreen 所指对象的 contents 成员
    auto s2 = pScreen->*pdata;

    // data() 返回一个指向 Screen 类的 contents 成员的指针
    const string Screen::*pdata2 = Screen::data();
}